Introduksi

Dalam tugas LBB ini, fokus dari visualisasi data adalah pada persoalan seputar harga kendaraan bekas di Indonesia yang tersedia di tahun 2020. Data harga bekas kendaraan ini diambil dari AtapData.ai.

Umumnya minat orang dalam mengkaji data kendaraan bekas adalah pada harga yang dikaitkan dengan jarak tempuh dan konsumsi bahan bakar. Dalam tugas ini, eksplorasi dilakukan pada faktor warna dan persepsi umum tentang merek-merek kendaraan buatan negara-negara di Eropa sebagai suatu kelompok dan merek-merek kendaraan buatan negara Jepang sebagai kelompok yang lain. Merek-merek kendaraan dari negara lain yang tidak mendominasi pasar seperti buatan China dan Korea akan dieksklusi dari bahasan di sini.

Eksplorasi data harga jual kendaraan bekas ini dapat digunakan oleh pemilik show room kendaraan bekas yang tengah memikirkan untuk menambah koleksi barang yang akan dijual atau mereka yang tengah menimbang-nimbang kendaraan bekas dengan melakukan perbandingan antara kendaraan bekas buatan negara-negara di Eropa atau kendaraan buatan Jepang dimana harga tidak menjadi satu-satunya faktor penentu.

Pustaka Fungsi

Untuk keperluan penyiapan data (data wrangling) dan pembangkitan grafik, pustaka-pustaka fungsi yang digunakan adalah sebagai berikut:

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readr)
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.2     v stringr 1.4.0
## v tidyr   1.1.3     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ggplot2)
library(ggthemes)
library(glue)
## 
## Attaching package: 'glue'
## The following object is masked from 'package:dplyr':
## 
##     collapse
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor
library(forcats)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(RColorBrewer)

Penyiapan Data

Untuk dapat bekerja dengan dataset yang ada, kita perlu memastikan terlebih dulu bahwa data dapat dibaca. Mengikuti pembacaan ada sejumlah tindakan berkaitan dengan pembersihan data (data wrangling) yang akan dilakukan.

Pembacaan Data

Data mengenai harga jual kendaraan bekas yang diunduh dari atapdata.id dinilai masih up-to-date mengingat data tersebut dikoleksi di tahun 2020. Berkaitan dengan itu eksplorasi yang dilakukan menggunakan tahun 2020 sebagai tahun analisa.

Dari dataset yang ada, data yang digunakan adalah “cars_train_new.csv”. Dasar pertimbangan pemilihan tersebut adalah sederhana saja, yaitu berdasarkan ukuran file yang terbesar saja. Data semula memang dirancang untuk kebutuhan pelatihan (training) dan pengujian (testing) dalam konteks pembelajaran mesin (machine learning)

usedCars_orig = read.csv("dataset231/cars_train_new.csv")

Struktur Dataset

Untuk mengetahui struktur data yang ada

str(usedCars_orig)
## 'data.frame':    80000 obs. of  15 variables:
##  $ id          : int  50318 19882 29381 22517 7046 57591 4047 74675 43386 5521 ...
##  $ title       : chr  "2010 Nissan X-Trail 2.0 T31 SUV" "2012 Mazda 2 1.5 S Sedan" "2014 Honda Odyssey 2.4 Prestige 2.4 MPV" "2016 Mitsubishi Pajero Sport 2.5 Dakar SUV" ...
##  $ brand       : chr  "Nissan" "Mazda" "Honda" "Mitsubishi" ...
##  $ model       : chr  "X-Trail" "2" "Odyssey" "Pajero Sport" ...
##  $ variant     : chr  "T31" "S" "Prestige 2.4" "Dakar" ...
##  $ fuelType    : chr  "Pertamax" "Pertamax" "Pertamax" "Solar" ...
##  $ bodytype    : chr  "SUV" "Sedan" "MPV" "SUV" ...
##  $ transmission: chr  "Manual" "Manual" "Automatic" "Automatic" ...
##  $ seating     : chr  "5" "5" "6" "7" ...
##  $ year        : int  2010 2012 2014 2016 2008 2018 2011 2010 2016 2012 ...
##  $ mileage     : int  250 67500 64000 17500 50000 40000 76000 77500 44000 1400 ...
##  $ color       : chr  "Silver" "Hijau" "Hitam" "Hitam" ...
##  $ image       : chr  "https://img4.icarcdn.com/2200806/thumb-l_used-car-mobil123-nissan-x-trail-t31-suv-indonesia_2200806_CRYd08BRoE7"| __truncated__ "https://img2.icarcdn.com/8715916/thumb-l_used-car-mobil123-mazda-2-s-sedan-indonesia_8715916_5EnefRZF3SNiJUnI1t"| __truncated__ "https://img3.icarcdn.com/6198256/thumb-l_used-car-mobil123-honda-odyssey-prestige-2.4-mpv-indonesia_6198256_ECH"| __truncated__ "https://img5.icarcdn.com/1648605/thumb-l_used-car-mobil123-mitsubishi-pajero-sport-dakar-suv-indonesia_1648605_"| __truncated__ ...
##  $ place       : chr  "Wonogiri" "Surabaya" "Jakarta Selatan" "Bandung" ...
##  $ price       : num  1.15e+08 1.05e+08 3.55e+08 4.55e+08 1.62e+08 ...

Dari hasil di atas diketahui ada 15 kolom dengan masing-masing tipe data. Untuk keperluan pembahasan lebih lanjut, dua kolom akan didrop, yaitu kolom title dan kolom image. Drop kedua kolom akan dilakukan setelah pemeriksaan kesesuaian tipe data.

Pemeriksaan Tipe Data

Dari hasil pemeriksaan kesesuaian tipe, tipe dari kolom year, yaitu integer, tidak akan diubah ke format date (tanggal) mengingat granularitasnya adalah tahunan. Dalam dataset memang tidak tersedia informasi detil meliputi hari dan bulan dari tanggal manufakturisasi atau memang dalam hal ini tidak akan dilakukan penelusuran hingga detil seperti itu dari tanggal pembuatan masing-masing kendaraan. Dalam beberapa hal informasi bulan mempengaruhi preferensi pembeli kendaraan baru, namun tidak demikiannya untuk kendaraan bekas secara umum.

Mengabaikan Baris dengan Missing Value

Kita juga ingin memastikan tidak ada missing value (NA) dalam dataset yang dikaji. Untuk itu kita hilangkan semua baris yang mengandung missing value bila terdeteksi.

usedCars_orig = na.omit(usedCars_orig) 

Drop Kolom

Setelah memastikan tidak ada kemunculan missing value pada sebarang baris, kita akan mendrop dua kolom sebagaimana disinggung sebelumnya:

usedCars_orig = usedCars_orig %>% subset(select = -c(title, image))
str(usedCars_orig)
## 'data.frame':    79993 obs. of  13 variables:
##  $ id          : int  50318 19882 29381 22517 7046 57591 4047 74675 43386 5521 ...
##  $ brand       : chr  "Nissan" "Mazda" "Honda" "Mitsubishi" ...
##  $ model       : chr  "X-Trail" "2" "Odyssey" "Pajero Sport" ...
##  $ variant     : chr  "T31" "S" "Prestige 2.4" "Dakar" ...
##  $ fuelType    : chr  "Pertamax" "Pertamax" "Pertamax" "Solar" ...
##  $ bodytype    : chr  "SUV" "Sedan" "MPV" "SUV" ...
##  $ transmission: chr  "Manual" "Manual" "Automatic" "Automatic" ...
##  $ seating     : chr  "5" "5" "6" "7" ...
##  $ year        : int  2010 2012 2014 2016 2008 2018 2011 2010 2016 2012 ...
##  $ mileage     : int  250 67500 64000 17500 50000 40000 76000 77500 44000 1400 ...
##  $ color       : chr  "Silver" "Hijau" "Hitam" "Hitam" ...
##  $ place       : chr  "Wonogiri" "Surabaya" "Jakarta Selatan" "Bandung" ...
##  $ price       : num  1.15e+08 1.05e+08 3.55e+08 4.55e+08 1.62e+08 ...
# banyak kolom setelah melakukan drop
length(colnames(usedCars_orig))
## [1] 13

Mutasi Kolom

Secara khusus, usia kendaraan bekas itu menarik untuk dikaji. Karenanya kita tambahkan satu kolom yang mencatat usia kendaraan dengan patokan tahun 2020 (saat data kendaraan bekas ini dpersiapkan). Selain itu kita juga mencoba mengkategorikan usia pemakaian yang dikatakan muda, sedang dan tua. Kita definisikan begitu saja bahwa usia kendaraan kurang atau sama dengan 3 tahun disebut muda (Low), usia kendaraan antara 3 dan 10 tahun dikatakan sedang (Medium), dan usia kendaraan di atas 10 tahun disebut sebagai usia tua (High).

usedCars_orig = 
   usedCars_orig %>% mutate(age = as.integer(2020 - year))
usedCars_orig =
   usedCars_orig %>% mutate(age_Cat = if_else(age <= 3, "Low", if_else(age > 3 & age <=10, "Medium", "High")))  

usedCars_orig %>% select(brand, age, age_Cat) %>% head(10)

Sebagai kasus contoh, misalkan kita ingin mengetahui usia kendaraan merek Toyota atau Suzuki yang lebih atau sama dengan 5 tahun

usedCars_orig %>% 
   filter(brand == "Toyota" | brand == "Suzuki", age >= 5) %>% 
   select(brand, model, age) %>% 
   head(15)

Merek Kendaraan yang Unik

Sebelum membatasi kajian pada merek-merek kendaraan buatan negara-negara di Eropa dan Jepang, ada baiknya kita mengetahui merek-merek kendaraan yang unik dalam dataset yang ada

uniqueBr <- unique(usedCars_orig$brand)
# banyak merek kendaraan yang unik
length(uniqueBr)
## [1] 59
# urut merek kendaraan secara alfabetik
sort(uniqueBr, decreasing = F)
##  [1] "Abarth"          "Aston Martin"    "Audi"            "Bentley"        
##  [5] "BMW"             "Cadillac"        "Chery"           "Chevrolet"      
##  [9] "Chrysler"        "Daewoo"          "Daihatsu"        "Datsun"         
## [13] "DFSK"            "Dodge"           "Elf"             "Ferrari"        
## [17] "Fiat"            "Ford"            "Geely"           "Hino"           
## [21] "Holden"          "Honda"           "Hummer"          "Hyundai"        
## [25] "Infiniti"        "Isuzu"           "Jaguar"          "Jeep"           
## [29] "KIA"             "Lamborghini"     "Land Rover"      "Lexus"          
## [33] "Maserati"        "Mazda"           "McLaren"         "Mercedes-Benz"  
## [37] "MINI"            "Mitsubishi"      "Mitsubishi Colt" "Nissan"         
## [41] "Opel"            "Peugeot"         "Porsche"         "Proton"         
## [45] "Renault"         "Reo"             "Rolls-Royce"     "Rover"          
## [49] "smart"           "Subaru"          "Suzuki"          "Tata"           
## [53] "Tesla"           "Timor"           "Toyota"          "UD TRUCKS"      
## [57] "Volkswagen"      "Volvo"           "Wuling"

Tampak bahwa ada 59 merk kendaraan yang unik. Namun karena ada kemunculan beberapa merek yang tidak tepat, kita perbaiki beberapa value pada kolom brand, yaitu merek “Elf” dan merek “Mitsubishi Colt” dimana sebenarnya “Elf” dan “Colt” adalah model dari merek “Isuzu” dan “Mitsubishi”.

usedCars_orig["brand"][usedCars_orig["brand"] == "Elf"] <- "Isuzu"
usedCars_orig["brand"][usedCars_orig["brand"] == "Mitsubishi Colt"] <- "Mitsubishi"

Setelah koreksi, kini ada 57 merek kendaraan yang unik. Ke-57 merek kendaraan tersebut akan diklasifikasikan menurut dua kelompok. Kelompok pertama adalah kelompok merek-merek kendaraan yang berasal dari negara-negara di Eropa dan kelompok kedua adalah merek kendaraan yang khusus dari negara Jepang saja.

Pengelompokan Merek

Sebelum mengelompokan merek-merek kendaraan berdasarkan negara pembuatnya, kita akan kelompokkan data berdasarkan mereknya terlebih dulu:

usedCars_grBr = usedCars_orig %>% 
   group_by(brand) %>% 
   arrange(brand)
head(usedCars_grBr)
tail(usedCars_grBr)

Selanjutnya kita melakukan pengelompokan kendaraan yang diproduksi di Eropa dan di Jepang sebagai berikut:

euroCars = c("Abart", "Aston Martin", "Audi", "Bentley", "BMW", "Ferrari", "Fiat", "Jaguar", "Lamborghini", "Land Rover", "Maserati", "McLaren", "Mercedes-Benz", "MINI", "Opel", "Peugeot", "Porsche", "Renault", "Rolls-Royce", "Rover", "smart", "Volkswagen", "Volvo")
length(euroCars)

japanCars = c("Daihatsu", "Datsun", "Elf", "Hino", "Honda", "Infiniti", "Isuzu", "Lexus", "Mazda", "Mitsubishi", "Mitsubishi Colt", "Nissan", "Subaru", "Suzuki", "Toyota", "UD TRUCKS")
length(japanCars)

di mana ada 23 merek kendaraan yang diproduksi di beberapa negara di Eropa dan ada 16 merek kendaraan yang diproduksi di Jepang.

Berikutnya kita akan persempit bahasan pada kendaraan-kendaraan buatan negara-negara di Eropa dan Jepang saja:

usedCars_EuroJapan = usedCars_grBr %>% 
   filter(brand %in% euroCars | brand %in% japanCars)
head(usedCars_EuroJapan)

Setelah semua merek kendaraan produksi negara-negara di Eropa dan Jepang terseleksi, kita akan pisahkan (split) semua merek tersebut ke dalam dua kelompok.

usedCars_Euro = usedCars_EuroJapan %>% filter(brand %in% euroCars)
usedCars_Japan = usedCars_EuroJapan %>% filter(brand %in% japanCars)

Untuk mengetahui banyak kendaraan masing-masing merek yang ditawarkan di pasar kendaraan bekas, kita bisa temukan dengan perintah berikut:

usedCars_Euro_Br = 
   usedCars_Euro %>%
   group_by(brand)

t_Euro = data.frame(table(unlist(usedCars_Euro_Br$brand)))
t_Euro

Dalam bentuk diagram pie, informasi pada tabel di atas dapat diperlihatkan secara visual sebagai berikut:

pl_usedCars_Euro = plot_ly(t_Euro, labels = ~Var1, 
                           values = ~Freq, type = "pie")

pl_usedCars_Euro = pl_usedCars_Euro %>% 
   layout(title = 'Kendaraan Eropa Berdasarkan Jumlah',
         xaxis = list(showgrid = FALSE, zeroline = FALSE, 
                      showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, 
                      showticklabels = FALSE))

pl_usedCars_Euro   

Dari grafik terlihat bahwa untuk kelompok kendaraan Eropa, Mercedes-Benz menguasai pasar kendaraan bekas.

Bagaimana halnya dengan komposisi merek-merek kendaraan Jepang? Grafik berikut memperlihatkan komposisi dimaksud.

Bila kita ingin mengetahui usia kendaraan yang sudah lebih atau sama dengan 5 tahun (berarti sebagian masuk kategori Medium dan High), maka dengan menyaring data kita akan memperoleh hasil berikut

usedCars_EuroJapan_over5 = 
   usedCars_EuroJapan %>% 
   filter(age >= 5) 

Bila kita ingin mengetahui secara spesifik beberapa model Mercedes-Benz dari usia kendaraan yang tertinggi hingga lebih muda:

usedCars_EuroJapan_over5 %>%
   filter(brand == "Mercedes-Benz") %>%
   select(brand, model, year, age) %>% 
   arrange(-age) %>%
   head(10)

Dari tabel di atas tampak bahwa produk Mercedes Benz tertua yang ditawarkan di pasar adalah sedan model 190SL yang diproduksi pada tahun 1960. Penampakan kendaraan ini adalah sebagai berikut:

knitr::include_graphics(path = "img/mercedes-benz-sl-1960.jpeg")

yang diambil dari tautan berikut Mercedes Benz SL190, 1960

Nah, untuk mendapatkan gambaran besar dari tiap merek kendaraan Eropa berdasarkan kategori usia (Low, Medium dan High), kita dapat mengeksekusi chunk kode berikut:

myColors <- brewer.pal(5,"Set1")
names(myColors) <- levels(usedCars_Euro_Br$age_Cat)
Scale <- scale_colour_manual(name = "brand", values = myColors)
usedCars_Euro_AgeCat_sorted =
   usedCars_Euro_Br[with(usedCars_Euro_Br, order(brand, age_Cat)),]

usedCars_Euro_AgeCat_sorted$age_Cat = 
   factor(usedCars_Euro_AgeCat_sorted$age_Cat, 
          levels = c("Low", "Medium", "High")
         )
pl_usedCars_Euro_AgeCat = usedCars_Euro_AgeCat_sorted %>% 
   ggplot(aes(x = brand, y = age, col = brand)) +
   geom_point(alpha = 0.6) +
   facet_wrap(~age_Cat, scales = "free_x") +
   scale_x_discrete(expand = c(0.1, 0.4)) +
   coord_flip() +
   labs(y = "Usia",
        x = "") +
   theme(plot.background = element_rect(fill = "white"),
         panel.background = element_rect(fill = "khaki1"),
         panel.grid = element_blank(),
         legend.position = "none")

ggplotly(pl_usedCars_Euro_AgeCat) %>%
   layout(
      title = list(text = 
                      paste0(
                         "Kendaraan Eropa Berdasarkan Kategori Usia",
                         "<br>", 
                         "<sup>", " ", "</sup>")
                  ),
      margin = list(l = 60, r = 60,
                    b = 25, t = 80)
      )

Dari grafik di atas tampak bahwa untuk kendaraan usia tua (kategori usia High), sebaran nilai Mercedes Benz adalah yang paling lebar. Artinya untuk usia kendaraan lebih dari 10 tahun hingga 60 tahun, pasar kendaraan bekas diramaikan oleh kehadiran kendaraan merek bintang tersebut dengan berbagai model dan variannya. Di sisi lain, besar kemungkinan juga bahwa untuk beberapa merek kendaraan tertentu dengan model-model yang masuk kategori langka (merupakan collector item) memang tidak ditawarkan melalui media yang umum.

Selain Mercedes-Benz kita dapat mengamati bahwa pada kategori usia tinggi (High) Volkswagen menempati urutan kedua dengan model yang diproduksi lebih dari 10 tahun lalu. Kita juga dapat mengamati bahwa model BMW yang berusia tinggi tidaklah banyak. Sekali lagi ada kemungkinan bahwa item-item spesial BMW yang berusia tinggi tidaklah ditawarkan di pasar melalui media konvensional atau pun media daring. Bisa jadi perputaran item-item klasik BMW terjadi melalui klub-klub penggemar atau pecinta kendaraan produksi Jerman ini yang sering dijuluki sebagai bimmer.

Bagaimana halnya dengan merek-merek kendaraan Jepang? Berikut grafiknya yang dapat diperoleh dengan cara serupa.

Untuk kendaraan asal Jepang tidak mengherankan bila Toyota merajai pasar kendaraan berusia tinggi mengingat kehadiran awal Toyota di pasar kendaraan Indonesia sekitar 60 tahun lalu. Tidak hanya Toyota, menurut sejarah perkembangan otomotif di Indonesia, Mazda pun sudah beredar di Indonesia juga di tahun 1960-an. Selain Toyota dan Mazda beberapa merek kendaraan lainnya yang akrab di telinga kita adalah Suzuki, Mitsubishi,Honda dan Daihatsu.

Kasus

Setelah data dipersiapkan, khususnya dengan memfokuskan bahasan pada dua kelompok negara pembuat kendaraan, kita akan melakukan eksplorasi atas sejumlah kasus sebagai berikut.

Kasus 1

Kita mengetahui bahwa warna putih sempat menjadi trend dalam beberapa tahun belakangan ini. Bagaimana halnya dengan harga kendaraan bekas warna putih yang usianya sudah lebih dari 5 tahun? Pertanyaan tersebut dapat dirumuskan kembali sebagai: “Apakah kendaraan bekas Eropa warna putih dengan usia lebih dari 5 tahun mempunyai harga jual yang secara rata-rata lebih tinggi dari warna-warna lainnya?”

Untuk mendapatkan jawaban dari pertanyaan tersebut, kita perlu menyaring data kendaraan Eropa dengan warna putih. Lalu kita dapat menghitung rata-rata dari seluruh harga jual kendaraan buatan Eropa. Namun kita juga mengetahui bahwa sejumlah kendaraan buatan Eropa memiliki harga-harga yang sangat tinggi. Untuk pertimbangan tersebut kita akan menggunakan statistik median. Dengan diagram boxplot kita bisa mendapatkan sebaran harga kendaraan bekas dimaksud.

usedCars_Euro_white = usedCars_EuroJapan_over5 %>%
   filter(brand %in% euroCars) %>%
   filter(color == "Putih")
usedCars_Euro_white_mean = usedCars_Euro_white %>%
   group_by(brand) %>%
   summarise(price_mean = mean(price)) %>%
   arrange(brand)
plot1 = ggplot(
   data = usedCars_Euro_white, 
   aes(x = brand, y = price / 1000000, fill = brand)) +
   geom_boxplot(outlier.colour="red", 
                outlier.shape=16,
                outlier.size=2, notch=FALSE) +
   coord_flip() +
   labs(title="Harga Rata-Rata Kendaraan Bekas Eropa", 
        subtitle = "Warna Putih & Usia 5 Tahun Keatas",
        x = "",
        fill = "Merek") +
   scale_y_continuous(name="Harga dalam Jutaan", 
                      breaks = pretty(c(0,7000), n=14), 
                      limits=c(0, 7000)) +
   scale_x_discrete(expand = c(0.05, 0.15)) +
   theme(plot.background = element_rect(fill = "white"),
         panel.background = element_rect(fill = "khaki2"),
         legend.position = "none", 
         panel.grid = element_blank())

ggplotly(plot1) 

Dari sebaran di atas, dapat dilihat beberapa merek kendaraan mempunyai rentang nilai (harga) yang sangat lebar dan/atau pencilan yang cukup ekstrem, seperti BMW, Porsche, Mercedes Benz dan Lamborghini. Menggunakan istilah yang populer di kalangan masyarakat, rentang yang lebar dan/atau ditambah pencilan potensial mencerminkan apa yang dikenal mereka sebagai harga gelap.

Untuk memeriksa apakah ada perbedaan besar antara rata-rata harga jual dari kendaraan-kendaraan tersebut dengan median harga jual, berikut ditunjukkan perbedaan keduanya melalui grafik.

usedCars_Euro_mean = usedCars_EuroJapan_over5 %>%
   filter(brand %in% euroCars) %>%
   filter(color == "Putih") %>%
   group_by(brand) %>%
   summarise(price_mean = mean(price)) %>%
   arrange(brand)
usedCars_Euro_med = usedCars_EuroJapan_over5 %>%
   filter(brand %in% euroCars) %>%
   filter(color == "Putih") %>%
   group_by(brand) %>%
   summarise(price_med = median(price)) %>%
   arrange(brand)
usedCars_Euro_mean_med = cbind(usedCars_Euro_mean, usedCars_Euro_med)
usedCars_Euro_mean_med = 
   usedCars_Euro_mean_med[, 
                          !duplicated(colnames(usedCars_Euro_mean_med))] %>% 
   arrange(brand)
head(usedCars_Euro_mean_med) 
plot2 = usedCars_Euro_mean_med %>% 
   pivot_longer(cols = c(price_mean, price_med)) %>%
   ggplot(aes(x = value/1000000, y = brand)) +
   geom_bar(aes(fill = name), width = 0.8, 
            stat = "identity", position = "dodge") +
   labs(x = "", y = "") +
   scale_x_continuous(name="Harga dalam Jutaan",
                      breaks = pretty(c(0,6000), n=12), 
                      limits=c(0, 6000)) +
   theme(plot.background = element_rect(fill = "white"),
         panel.background = element_rect(fill = "khaki1"),
         panel.grid = element_blank(),
         legend.position = "bottom", legend.title = element_blank())

ggplotly(plot2) %>%
   layout(legend = list(orientation = "h", y = -0.15),
          xaxis = list(title = 
                          list(text = "Harga dalam Jutaan",
                               standoff = 2L)
                      ),
          title = list(text = 
                      paste0(
                         "Rata-Rata Dan Median Harga Kendaraan Bekas Eropa",
                         "<br>", 
                         "<sup>", 
                         "Warna Putih & Usia 5 Tahun Keatas", 
                         "</sup>")
                      ),
          margin = list(l = 60, r = 60,
                        b = 25, t = 75)
         )

Secara umum sangat logis terdapat perbedaan antara rata-rata dan median harga jual. Namun, kita tertarik dengan perbedaan yang ekstrem. Dari grafik terlihat bahwa hal tersebut terjadi pada merek Lamborghini. Tampak juga bahwa median cenderung mendekati Q3. Dapat disimpulkan bahwa harga kebanyakan model Lamborghini memang fantastis.

Kasus 2

Bagaimana halnya dengan ketersediaan kendaraan Eropa yang berusia lebih dari 3 tahun, yaitu termasuk kategori usia medium dan high, antara warna putih dan selain putih? Kita eksplorasi pertanyaan ini sebagai berikut:

usedCars_Euro_White_NonWhite <- usedCars_EuroJapan %>% 
  filter(brand %in% euroCars) %>%
  filter(age_Cat %in% c("Medium", "High")) %>%
  group_by(brand) %>% 
  summarise(white_col = sum(color == "Putih"),
            non_white_col = sum (color != "Putih")) %>% 
  arrange(desc(white_col)) 
  
usedCars_Euro_White_NonWhite %>% head()

Dari tabel terlihat bahwa kendaraan bermerek Mercedes Benz yang paling banyak berwarna putih. Untuk kendaraan berlogo bintang dengan usia lebih dari 3 tahun, terdapat 633 kendaraan berwarna putih dan 2083 kendaraan berwarna selain putih. Dengan demikian secara persentase kendaraan Mercedes yang usianya menengah dan tinggi berkisar 23,30%. Bilangan yang lumayan besar. Sementara bila dibandingkan dengan BMW maka banyak kendaraan bermerek ini yang usianya serupa adalah sekitar 32,10%. Dari segi jumlah total memang lebih banyak kendaraan Mercedes Benz yang berwarna putih namun secara persentase, lebih banyak kendaraan BMW yang berwarna putih. Dengan kata lain, secara tak langsung dapat dikatakan bahwa BMW warna putih cukup menjadi warna favorit setidaknya bagi pemilik showroom dibanding warna-warna lainnya.

plot3 = usedCars_Euro_White_NonWhite %>% 
   pivot_longer(cols = c(non_white_col, white_col)) %>%
   ggplot(aes(x = value, y = brand)) +
   geom_col(aes(fill = name), width = 0.8, position = "dodge") +
   labs(x = "", y = "", fill = "Warna Kendaraan") +
   theme(plot.background = element_rect(fill = "white"),
         panel.background = element_rect(fill = "khaki1"),
         panel.grid = element_blank(),
         legend.position = "bottom", legend.title = element_blank())

ggplotly(plot3) %>% 
   layout(legend = list(orientation = "h", y = -0.15),
          title =  list(
                        text = 
                           paste0(
                            "Jumlah Kendaraan Bekas Eropa", "<br>",
                            "<sup>",
                            "Warna Putih vs Non Putih, Usia >3 tahun",
                            "</sup>")
                       ),
          xaxis = list(title = 
                          list(text = "Total", standoff = 5L)
                       ),
          margin = list(l = 60, r = 60,
                        b = 25, t = 75)
         )

Dari grafik tampak bahwa kendaraan bekas warna putih dari segi jumlah banyak muncul pada merek Mercedes Benz, BMW, Land Rover, Porsche dan Volkswagen, Audi dan Mini. Bagi penggemar kendaraan berwarna putih keempat merek tersebut dapat menjadi pilihan. Namun secara persentase, kita perhatikan bahwa pasar kendaraan bekas merek Audi didominasi warna putih. Walau secara jumlah tidak sebanyak merek-merek yang disebut sebelumnya, namun peluang mendapatkan Audi warna putih sangat besar.

Dari aspek harga jual, kita bisa mendapatkan gambaran berikut.

usedCars_Euro_Wh2 <- usedCars_EuroJapan %>% 
  filter(brand %in% euroCars) %>%
  filter(age_Cat %in% c("Medium", "High")) %>%
  group_by(brand) %>% 
  summarise(white_mean = 
               mean(if_else(color == "Putih", price, 0)),
            non_white_mean = 
               mean(if_else(color != "Putih", price, 0)))

usedCars_Euro_Wh2 = 
   usedCars_Euro_Wh2 %>% 
   mutate(white_mean_short = white_mean/1000000,
          non_white_mean_short = non_white_mean/1000000) %>%
   arrange(desc(white_mean_short))

Kasus 3

Bagaimana halnya dengan kendaraan Jepang dengan usia sama, yaitu kategori medium dan high, antara warna putih dan selain putih? Kita mencoba mencari jawabannya dari grafik yang akan dibangkitkan setelah filtrasi berdasarkan koleksi merek kendaraan yang diproduksi di Jepang.

Dari grafik terlihat bahwa ternyata kendaraan Jepang yang secara persentase mendominasi ditemukan pada merek Mitsubishi dan Mazda. Sementara pada merek-merek utama lainnya seperti Toyota, Honda, Daihatsu atau Suzuki. persentase banyak warna kendaraan putih tidaklah sebesar merek Mitsubishi dan Mazda. Dengan kata lain, calon pembeli mempunyai peluang lebih besar mendapatkan warna putih pada merek Mitsubishi dan Mazda. Namun bila dilihat dari jumlah kendaraan di pasaran maka kesimpulan tersebut tidak bersifat mutlak. Jelas terlihat bahwa populasi kendaraan bekas merek Toyota dan Honda jauh lebih besar dari Mazda.

Dari aspek harga jual, kita bisa mendapatkan gambaran berikut.

usedCars_Japan_Wh2 <- usedCars_EuroJapan %>% 
  filter(brand %in% japanCars) %>%
  filter(age_Cat %in% c("Medium", "High")) %>%
  group_by(brand) %>% 
  summarise(white_mean = 
               mean(if_else(color == "Putih", price, 0)),
            non_white_mean = 
               mean(if_else(color != "Putih", price, 0)))

usedCars_Japan_Wh2 = 
   usedCars_Japan_Wh2 %>% 
   mutate(white_mean_short = white_mean/1000000,
          non_white_mean_short = non_white_mean/1000000) %>%
   arrange(desc(white_mean_short))

Menarik mengamati dari garfik bahwa harga rata-rata untuk Lexus warna putih yang dikenal secara umum sebagai kendaraan premium malah lebih tinggi dari versi warna-warna lainnya.

Kasus 4

Dalam kasus sebelumnya tampak bahwa kendaraan bekas premium Jepang berwarna putih ditawarkan dengan harga tinggi. Apakah kasus ini serupa dengan kendaraan-kendaraan buatan Eropa yang berdasarkan observasi didominasi dengan warna hitam? Untuk beberapa kendaraan premium, seperti Rolls Royce, warna putih bukanlah pilihan yang populer atau bisa juga warna tidak mempengaruhi harga jualnya. Dugaan warna hitam tetap menjadi pilihan utama untuk kendaraan premium seperti Rolls Royce ini. Namun bagaimana dengan gambaran secara umum kendaraan-kendaraan Eropa berkaitan dengan warna hitam? Apakah warna ini dominan dalam kelompok kendaraan berwarna selain putih? Berikut pemeriksaan tentang fakta ketersediaan kendaraan Eropa warna hitam di pasaran.

usedCars_Euro_nonWh <- usedCars_EuroJapan %>% 
  filter(brand %in% euroCars & color != "Putih")
total_nonWh = nrow(usedCars_Euro_nonWh)
nbBlack = sum(usedCars_Euro_nonWh$color == "Hitam")
nbBlack_perc = percent(nbBlack/total_nonWh, accuracy = 0.01, suffix = "%")
nbBlack_perc

Dari perhitungan di atas tampak bahwa warna hitam mendominasi warna-warna selain putih dari kendaraan bekas baik kendaraan biasa maupun premium, yaitu sebesar 64,38%

Bagaimana dengan rata-rata harga jual kendaraan Eropa warna hitam dengan usia kendaraan di atas 3 tahun (yaitu kategori usia Medium dan High)?

usedCars_Euro_NonWh <- usedCars_EuroJapan %>% 
  filter(brand %in% euroCars) %>%
  filter(age_Cat %in% c("Medium", "High")) %>%
  group_by(brand) %>% 
  summarise(black_mean = 
               mean(if_else(color == "Hitam", price, 0)),
            non_black_mean = 
               mean(if_else(color != "Putih" & 
                            color != "Hitam", price, 0))) %>% 
  arrange(desc(black_mean))
  
head(usedCars_Euro_NonWh)

Tampak ada indikasi benar terhadap dugaan awal kita bahwa beberapa kendaraan premium berwarna hitam khususnya Rolls Royce, dan beberapa kendaraan lain seperti Bentley, Land Rover, Mercedes Benz, BMW serta Audi mempunyai harga rata-rata yang jauh lebih tinggi dari warna-warna lain selain hitam dan putih. Sementara itu beberapa kendaraan yang desainnya sporty seperti Porsche, Aston Martin dan Maserati, memiliki harga jual yang lebih tinggi untuk warna-warna selain hitam dan putih. Dalam kenyataannya kita bisa mengamati populasi kendaraan-kendaraan sporty dengan warna primer atau sekunder yang cerah.

Kasus 5

Umumnya berlaku bahwa dengan bertambahnya jarak tempuh (mileage), maka harga kendaraan akan menurun. Namun adalah perkecualian untuk hal ini bagi lima merek kendaraan Eropa yang kita minati, yaitu Audi, BMW, Mercedes-Benz, Porsche dan Volkswagen? Untuk pembatasan kajian kita batasi saja jarak tempuh hingga 150.000km.

usedCars_Euro_Selected_BrMilPr = usedCars_Euro_Br %>%
   filter(mileage<150000, 
          brand %in% c("Audi", "BMW", "Mercedes-Benz", 
                       "Porsche", "Volkswagen" )) %>%
   select(brand, mileage, price)
pl_usedCars_Euro_BrMilPr = usedCars_Euro_Selected_BrMilPr %>%
   ggplot(aes(x = mileage, y = price/1000000, col = brand)) +
   geom_jitter(alpha = 0.5) +
   labs(x = "Jarak", y ="Harga dalam Jutaan", colour = "Merek" )
ggplotly(pl_usedCars_Euro_BrMilPr)

Kesimpulan

Umumnya berlaku perbandingan terbalik antara harga dan jarak tempuh.
Dengan mengamati faktor-faktor pada dataset harga jual kendaraan bekas yang ada, banyak hal bisa digali. Keempat kasus yang disajikan hanyalah sebagian pertanyaan yang jawabannya dicarikan melalui eksplorasi data dan grafik yang dibangkitkan. Sekalipun demikian jawaban yang diperoleh tidaklah suatu kemutlakan mengingat ada asumsi yang diperkenalkan disamping jawaban-jawaban tersebut diperoleh dengan menginterpretasi pemusatan data, sebaran nilai, sebaran frekuensi dan pencilan yang ada. Semoga apa yang telah disajikan ini dapat bermanfaat bagi pembaca.